middleware in distributed system